package com.yqh.discovery;

import com.yqh.Constant;
import com.yqh.discovery.impl.NacosRegistry;
import com.yqh.discovery.impl.ZookeeperRegistry;
import com.yqh.exceptions.DiscoveryException;

/**
 * @author 阳秋豪
 * @createTime 2024/2/28
 */

public class RegistryConfig {
    // 定义连接的 url zookeeper://127.0.0.1:2181
    private final String connectString;

    public RegistryConfig(String connectString) {
        this.connectString = connectString;
    }

    /**
     * 可以使用简单工厂来完成
     *
     * @return 返回具体的注册中心实例
     */
    public Registry getRegistry() {
        // 1、获取注册中心的类型
        String registryType = getRegistryTypeOrHost(true).toLowerCase().trim();
        if (registryType.equals("zookeeper")) {
            String host = getRegistryTypeOrHost(false).toLowerCase().trim();
            return new ZookeeperRegistry(host, Constant.TIME_OUT);
        } else if (registryType.equals("nacos")) {
            String host = getRegistryTypeOrHost(false).toLowerCase().trim();
            return new NacosRegistry(host, Constant.TIME_OUT);
        }
        throw new DiscoveryException("未发现合适的注册中心");
    }

    /**
     * @param isType true -- 获取注册中心类型 false -- 获取主机地址及端口号
     * @return 注册中心类型或主机地址及端口号
     */
    private String getRegistryTypeOrHost(boolean isType) {
        String[] typeAndHost = connectString.split("://");
        if (typeAndHost.length != 2) {
            throw new RuntimeException("给定的注册中心 url 不合法");
        }
        if (isType) {
            return typeAndHost[0];
        } else {
            return typeAndHost[1];
        }
    }
}
